package com.rop.system.util;

import com.rop.model.system.SysMenu;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @Title: MenuHelper
 * @Author Rop
 * @Date 2023/4/25 11:47
 * @description: 菜单树形结构
 */

public class MenuHelper {

    /**
     * 构建树形
     * @param sysMenuList 菜单集合
     * @return 结果
     */
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        if (CollectionUtils.isEmpty(sysMenuList)) {
            return new ArrayList<>();
        }

        // 创建集合封装最终数据
        List<SysMenu> tree = new ArrayList<>();

        // 遍历所有菜单集合
        for (SysMenu sysMenu : sysMenuList) {
            // 找到递归入口，parentId == 0
            if (Objects.equals(sysMenu.getParentId(), 0L)) {
                tree.add(findChildren(sysMenu, sysMenuList));
            }
        }
        return tree;
    }

    private static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> treeNodes) {
        // 数据初始化
        sysMenu.setChildren(new ArrayList<>());

        for (SysMenu treeNode : treeNodes) {
            // 获取当前菜单id
            String id = sysMenu.getId();

            // 获取所有菜单parentId
            Long parentId = treeNode.getParentId();

            if (Objects.equals(Long.parseLong(id), parentId)) {

                // 优化：判断假设该菜单children为空，对其进行初始化
                if (CollectionUtils.isEmpty(sysMenu.getChildren())) {
                    sysMenu.setChildren(new ArrayList<>());
                }

                sysMenu.getChildren().add(findChildren(treeNode, treeNodes));
            }
        }

        return sysMenu;
    }
}
